昨天完成了第一個能查詢的向量資料庫,今天要更仔細地檢視「Top-K 向量檢索」這個最基礎的做法,看看它實際上有哪些侷限,作為接下來一週檢索優化系列的開場。
顧名思義,就是每次查詢固定取回「相似度最高的 K 筆」結果。這是最簡單、也是最多 RAG 教學範例採用的做法:
results = search_similar_chunks(question, top_k=5)
而且 K 值往往是「一刀切」的固定值,不會因為問題的複雜度而調整——簡單的事實查詢可能 1-2 筆就夠了,複雜的比較型問題可能需要 5-10 筆,但固定 K 值無法區分這種差異。
向量相似度衡量的是「語意接近程度」,但語意接近不等於「包含答案」。例如問題是「A 產品跟 B 產品哪個比較貴?」,向量檢索可能會找到「談論產品價格」的段落,但不一定同時包含 A 和 B 兩者的價格資訊。
向量搜尋擅長抓語意相近的內容,但對於「精確的專有名詞、代號、數字」反而不一定敏感。例如使用者問「錯誤代碼 E1024 是什麼意思」,向量搜尋可能因為語意相似度計算,把「錯誤代碼 E1025」的說明也排到很前面,而真正該優先匹配的精確字串「E1024」卻沒有被特別看重。
如果答案剛好橫跨兩個相鄰的 chunk(例如在 Chunking 邊界被切開),單純的 Top-K 檢索可能只取回其中一個 chunk,導致資訊不完整。
| 問題 | 對應的解法 | 對應章節 |
|---|---|---|
| 精確關鍵字匹配不足 | Hybrid Search(向量 + 關鍵字搜尋) | Day 16 |
| 語意相似 ≠ 真正相關 | Rerank(用更精細的模型重新排序) | Day 17 |
| K 值難以固定 | Query 改寫、動態調整策略 | Day 18 |
| 上下文被切斷 | 取回相鄰 chunk、調整 Overlap | Day 6-7 已討論、Day 20 延伸 |
Top-K 向量檢索是一個很好的起點,但直接拿基礎版本上線,很容易在實際使用中遇到「檢索結果不夠精準」的抱怨。理解它的侷限,才知道接下來的優化手段(Hybrid Search、Rerank、Query 改寫)分別在解決什麼問題,而不是每個技巧都盲目疊加上去。明天我們就從 Hybrid Search 開始,補上關鍵字精確匹配的能力。